#pragma once

namespace Commands
{
    class IGraphicElement
    {
    public:

        enum Flip
        {
            NONE                = 0,
            FLIPPED_HORIZONTAL  = 1,
            FLIPPED_VERTICAL    = 2,
            ROTATED_180         = 3
        };

        virtual float GetWidth(void) const = 0;
        virtual float GetHeight(void) const = 0;
    
        virtual void SetX(const float x) = 0;
        virtual float GetX(void) const = 0;
    
        virtual void SetY(const float y) = 0;
        virtual float GetY(void) const = 0;
    
        virtual void SetXY(const float x, const float y) = 0;
    
        virtual void SetAngle(const float angle) = 0;
        virtual float GetAngle(void) const = 0;
    
        virtual void SetXScale(const float scale) = 0;
        virtual float GetXScale(void) const = 0;
    
        virtual void SetYScale(const float scale) = 0;
        virtual float GetYScale(void) const = 0;
    
        virtual void SetScale(const float scale) = 0;
    
        virtual void SetZOrder(const int order) = 0;
        virtual int GetZOrder(void) const = 0;

        virtual IGraphicElement::Flip GetFlip(void) const = 0;

        virtual void SetFlip(const IGraphicElement::Flip flip) = 0;

        virtual void SetAlpha(const float alpha) = 0;
        virtual float GetAlpha(void) const = 0;
    
        virtual void Show(void) = 0;
        virtual void Hide(void) = 0;
    
        virtual void SetXAnchor(const float anchor)  = 0;
        virtual float GetXAnchor(void) const = 0;
    
        virtual void SetYAnchor(const float anchor)  = 0;
        virtual float GetYAnchor(void) const = 0;
    
        virtual ~IGraphicElement(){}
    };
}//namespace
